//package com.warmguard.core.utils;
//
//import com.warmguard.core.core.LoginUser;
//import com.warmguard.core.core.LoginUserHolder;
//import com.warmguard.core.enums.ResultCodeEnum;
//import io.jsonwebtoken.*;
//
//import javax.crypto.SecretKey;
//import java.util.Date;
//
///**
// * ClassName: JwtUtil
// * PackageName: com.enquan.lease.common.util
// * Description:
// *
// * @Author: 32782
// * @Date: 11/8/2024 下午10:38
// * @Version: 1.0
// */
//public class JwtUtil {
//
//    private static final SecretKey SECRET_KEY = Keys.hmacShaKeyFor("UHa0L2I48zvFJX6QGZ780qCterCWug8J".getBytes());
//
//    public static String createToken(Long userId, String userName){
//        //密钥
//        String jwt = Jwts.builder()
//                //设置过期时间
//                .setExpiration(new Date(System.currentTimeMillis() + 36000000))
//                .setSubject("LOGIN_USER")
//                //设置自定义的字段
//                .claim("userId", userId)
//                .claim("username", userName)
//                //处理签名
//                .signWith(SECRET_KEY, SignatureAlgorithm.HS256)
//                .compact();
//        return jwt;
//    }
//
//    // 相当于：第一次登陆 拦截器那边直接放行 去登录 返回token  第二次来走拦截器把token里面的用户信息解析出来存入到ThredaLocal中 给后面收使用
//    //如果没有抛出异常说明token 登录正常
//    //发送异常就说明 token有问题
//    public static Claims parseToken(String token){
//        // token是null无法解析
//        if (token == null){
//            throw new LeaseException(ResultCodeEnum.ADMIN_LOGIN_AUTH);
//        }
//        try {
//            JwtParser jwtParser = Jwts.parserBuilder()
//                    .setSigningKey(SECRET_KEY)
//                    .build();
//            Jws<Claims> headerClaimsJwt = jwtParser.parseClaimsJws(token);
//            Claims body = headerClaimsJwt.getBody();
//            Long userId = body.get("userId", Long.class);
//            String userName = body.get("username", String.class);
//            LoginUserHolder.setLoginUser(new LoginUser(userId, userName));
//            return body;
//        } catch (ExpiredJwtException e) {
//            throw new LeaseException(ResultCodeEnum.TOKEN_EXPIRED);
//        } catch (JwtException e){
//            throw  new LeaseException(ResultCodeEnum.TOKEN_INVALID);
//        }
//    }
//}
